package com.jl15988.pguard.model;

import com.jl15988.pguard.enums.ProcessRestartStrategy;
import com.jl15988.pguard.function.ProcessErrorCallback;
import com.jl15988.pguard.function.ProcessOutputCallback;
import com.jl15988.pguard.function.ProcessStatusCallback;
import com.jl15988.pguard.function.ProcessStatusChangeCallback;
import com.jl15988.pguard.platform.ProcessPlatformConfig;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

/**
 * 进程配置类
 */
@Getter
@Setter
@Builder
public class ProcessConfig {
    /**
     * 进程ID（唯一标识）
     */
    private String processId;

    /**
     * 要执行的命令
     */
    private String command;

    /**
     * 工作目录
     */
    private String workingDirectory;

    /**
     * 端口号（可选），端口号用于辅助进程监听，用于检测服务是否可用
     */
    private Integer port;

    /**
     * 重启策略
     */
    @Builder.Default
    private ProcessRestartStrategy processRestartStrategy = ProcessRestartStrategy.NO_RESTART;

    /**
     * 最大重启次数（仅在RESTART_WITH_COUNT策略下生效）
     */
    @Builder.Default
    private int maxRestartCount = 3;

    /**
     * 重启间隔时间（毫秒）
     */
    @Builder.Default
    private long restartIntervalMs = 5000;

    /**
     * 是否自动启动
     */
    @Builder.Default
    private boolean autoStart = false;

    /**
     * 环境变量
     */
    private String[] environmentVariables;

    /**
     * 是否启用进程监听
     */
    @Builder.Default
    private boolean enableMonitoring = true;

    /**
     * 进程监听间隔（毫秒）
     */
    @Builder.Default
    private long monitoringIntervalMs = 5000;

    /**
     * 是否启用输出回调
     */
    @Builder.Default
    private boolean enableOutputCallback = false;

    /**
     * 是否启用错误回调
     */
    @Builder.Default
    private boolean enableErrorCallback = false;

    /**
     * 标准输出回调处理器
     * 用于处理进程的标准输出内容
     */
    private ProcessOutputCallback outputCallback;

    /**
     * 错误输出回调处理器
     * 用于处理进程的错误输出内容
     */
    private ProcessErrorCallback errorCallback;

    /**
     * 进程状态回调处理器
     * 用于监听进程的状态
     */
    private ProcessStatusCallback statusCallback;

    /**
     * 进程状态变化回调处理器
     * 用于处理进程的状态变化
     */
    private ProcessStatusChangeCallback statusChangeCallback;

    /**
     * 进程平台配置
     * 用于配置进程的平台相关信息
     */
    @Builder.Default
    private ProcessPlatformConfig platformConfig = new ProcessPlatformConfig();
}
